package com.gengzp.rpc.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @ClassName RemoteTransactional
 * @Description 远程事务注解
 * <p> 使用在远程调用接口的方法上, 即可实现二阶段提交分布式事务 </p>
 * <p> 若有方法添加了此注解, 那么需要提供一个被Spring管理的Bean,名字要与当前接口名相同, 但结尾加上Rollback </p>
 * <p> 这个bean中需提供一个方法与原方法除了方法名加了后缀不一样外，其他都一样 </p>
 * <p> 示例: </p>
 * <p> 接口 UserServiceInterface 中的方法 editUser() 加上了 @RemoteTransactional 注解 </p>
 * <p> 此时必须再单独提供一个bean, 命名 UserServiceInterfaceRollback, 该类必须被Spring识别并管理 </p>
 * <p> 在这个类中, 提供 editUser() 方法, 参数和返回全部与原方法相同, 内部实现回滚逻辑即可 </p>
 * @Author gengzp
 * @Date 2025/8/22 17:58
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RemoteTransactional {

}
